package vip.xiaomaoxiaoke.mpassistant.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import vip.xiaomaoxiaoke.mpassistant.dto.PageDTO;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.util.List;
import java.util.Optional;

public class PageUtil {

    /**
     * 根据PageDTO或实现了PageDTO的子类，以及目标的class对象构造mybatisPlus的分页查询条件
     * @param dto  PageDTO或实现了PageDTO的子类
     * @param tClass 泛型的类型，一般是PO的class 对象
     * @return mybatiPuls 的分页对象参数
     * */
    public static <T> Page<T> buildPage(PageDTO dto, Class<T> tClass) {
        // 判断前端是否传递了需要查询第几页，如果没有则默认查询第一页
        Integer page = Optional.ofNullable(dto).map(PageDTO::getPageNum).orElse(1);
        // 判断前端是否传递了每页查询的条数，如果没有则默认查询10条
        Integer size = Optional.ofNullable(dto).map(PageDTO::getPageSize).orElse(10);
        return new Page<>(page,size);
    }

    public static <T> Page<T> buildPage(List<T> list,Long total ) {
       Page<T> page = new Page<>();
       page.setRecords(list);
       page.setTotal(total);
        return page;
    }


    public static void main(String[] args) {
        String str = "(\"wwadsadw\").substring(#start,#end).toUpperCase()";

        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression(str);

        EvaluationContext context = new StandardEvaluationContext();
        context.setVariable("start",1);
        context.setVariable("end",3);
        System.out.println(expression.getValue(context));
    }

}
